<?php
namespace app\model;

use think\Model;

class DictType extends Model
{
    // 设置表名
    protected $name = 'dict_type';
    
    // 自动写入时间戳
    protected $autoWriteTimestamp = true;
    
    // 定义时间戳字段名
    protected $createTime = 'create_time';
    protected $updateTime = 'update_time';
    
    // 定义字段信息
    protected $schema = [
        'id'          => 'int',
        'dict_name'   => 'string',
        'dict_type'   => 'string',
        'status'      => 'int',
        'remark'      => 'string',
        'create_time' => 'datetime',
        'update_time' => 'datetime'
    ];
    
    /**
     * 字典数据关联
     */
    public function dictData()
    {
        return $this->hasMany(DictData::class, 'dict_type', 'dict_type');
    }
    
    /**
     * 字典名称搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchDictNameAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('dict_name', '%' . $value . '%');
        }
    }
    
    /**
     * 字典类型搜索器
     * @param \think\db\Query $query 查询对象
     * @param string $value 搜索值
     */
    public function searchDictTypeAttr($query, $value)
    {
        if (!empty($value)) {
            $query->whereLike('dict_type', '%' . $value . '%');
        }
    }
    
    /**
     * 状态搜索器
     * @param \think\db\Query $query 查询对象
     * @param int $value 搜索值
     */
    public function searchStatusAttr($query, $value)
    {
        if (isset($value) && $value !== '') {
            $query->where('status', $value);
        }
    }
    
    /**
     * 检查字典类型是否存在
     * @param string $dictType 字典类型
     * @param int $exceptId 排除的ID
     * @return bool 是否存在
     */
    public static function checkDictTypeUnique($dictType, $exceptId = null)
    {
        $query = self::where('dict_type', $dictType);
        if (!is_null($exceptId)) {
            $query = $query->where('id', '<>', $exceptId);
        }
        return $query->count() > 0;
    }
    
    /**
     * 根据字典类型获取字典数据
     * @param string $dictType 字典类型
     * @return array 字典数据
     */
    public static function getDictData($dictType)
    {
        $dictType = self::where('dict_type', $dictType)->where('status', 1)->find();
        if (!$dictType) {
            return [];
        }
        
        $dictData = DictData::where('dict_type', $dictType->dict_type)
            ->where('status', 1)
            ->order('sort', 'asc')
            ->select()
            ->toArray();
            
        return $dictData;
    }
} 